1 פתרון בחינת הבגרות פרק ראשון :Java שאלה 1 פעולות עזר:
6
3 C#: שאלה 1 פעולות עזר:
4
5 a.length = 5 0 1 2 3 4 a 2 4 7 12 18 שאלה 2 א. (a,11) sod ערך k i i<4 j j<5 a[i] a[j] a[i]+a[j] == k מוחזר 11 0 T 1 T 2 4 F 2 T 7 F 3 T 12 F 4 T 18 F 5 F אמת 1 T 2 T 4 7 T ב. (a,10) sod ערך k i i<4 j j<5 a[i] a[j] a[i]+a[j] == k מוחזר 11 0 T 1 T 2 4 F 2 T 7 F 3 T 12 F 4 T 18 F 5 F 1 T 2 T 4 7 F 3 T 12 F 4 T 18 F 5 F 2 T 3 T 7 12 F 4 T 18 F 5 F 3 T 4 T 12 18 F 5 F שקר 4 F
2 ג. ד. ה. הפעולה מחזירה "אמת" אם קיימים שני איברים במערך שסכומם k, ו- "שקר" אחרת. סיבוכיות הפעולה sod היא ) 2.O(n בהנחה שיש במערך n איברים: הלולאה החיצונית רצה על כל המערך - סה"כ n צעדים ובתוכה לולאה פנימית הרצה בכל פעם על איבר אחד פחות: 2 1 n 1 ( n 1) n n ( n 1) ( n 2) ( n 3)... 2 1 Sn O( n 2 2 2 ) what (a, k) a.length = 5 0 1 2 3 4 a 2 4 7 12 18 k left right left<right I a[left] II a[right] I+II == k I+II < k 11 0 4 T 2 18 F F 3 T 12 F F 2 T 7 F T ערך מוחזר אמת 1 T 4 T.O(n) what ו. סיבוכיות הפעולה היא הפעולה עוברת לכל היותר מעבר אחד על כל נתוני המערך, עד שמוצאת או לא מוצאת שני איברים שסכומם k. O(n 2 ) O(n) ז. סיבוכיות הפעולה - sod ריבועית סיבוכיות הפעולה - what ליניארית ולכן, what יעילה יותר. )1( )6( ח. sod תשיג את מטרתה, כי היא בודקת בכל פעם איבר אחר מול כולם. what לא תשיג את המטרתה, כי היא אינה בודקת את כל האפשרויות. למשל: עבור המערך הבא תחזיר sod "אמת", ואילו what תחזיר "שקר". 0 1 2 3 4 a 18 2 4 7 12
7 Java שאלה 3 ב. סיבוכיות הפעולה: הפעולה עוברת על כל אחד מ- n הצמתים בעץ. לפי אפשרות - I ספירת n האיברים במחסנית, סיבוכיות הפעולה ) 2 O(n לפי אפשרות - II ספירה של עד 3 איברים במחסנית (1)O ולכן סיבוכיות הפעולה O(n)
8
9 --- פעולה המחזירה מחסנית של סכום עד 3 איברים שבצמתי העץ ---// public static Stack<int> TreeSumStack (BinTreeNode<Stack<int>> t) Stack<int> s = new Stack<int>(); Sum (t, s); return s; C# שאלה 3 --- דרך //--- 1 public static void TreeSumStack(BinTreeNode<Stack<int>> t, Stack<int> s) if (t!= null) Sum(t.GetLeft(), s); int n = 3, sum = 0; Stack<int> s2 = t.getinfo(); while (! s2.isempty() && n > 0) sum = sum + s2.pop(); n -- ; Sum(t.GetRight(), s); ב. סיבוכיות הפעולה: הפעולה עוברת על כל אחד מ- n הצמתים בעץ. לפי אפשרות - I ספירת n האיברים במחסנית, סיבוכיות הפעולה ) 2 O(n לפי אפשרות - II ספירה של עד 3 איברים במחסנית (1)O ולכן סיבוכיות הפעולה O(n) --- דרך //--- 2 public static void TreeSumStack(BinTreeNode<Stack<int>> t, Stack<int> s) if (t!= null) Sum(t.GetLeft(), s); int sum = SumStack (t.getinfo(); s.push(sum); Sum(t.GetRight(), s); --- פעולה המחזירה את סכום עד 3 האיברים שבראש המחסנית ---// public static int SumStack(Stack<int> s) int sum = 0; for (int i = 0 ; I < 3 ; i++) if (! s.isempty()) sum += s.pop(); return sum;
11 שאלה א : Java 4 - ג. כותרות הפעולות משולב עם סעיפים ב' )מימוש פעולה בונה( ו- ג' )מימוש הפעולה )sum
11 ד. דרך כתיבה נוספת לניהול השלב השני של המשחק: boolean gameover = false; while (! gameover) if (! deck.move()) gameover = true;
16 שאלה א : C# 4 - ג. כותרות הפעולות משולב עם סעיפים ב' )מימוש פעולה בונה( ו- ג' )מימוש הפעולה )sum
13 ד. דרך כתיבה נוספת לניהול השלב השני של המשחק: bool gameover = false; while (! gameover) if (! deck.move()) gameover = true;
14 MOV BX, 0 XOR AH, AH MOV DX, 1 MOV CX, AX DEC CX JZ A3 A1: ADD BX, DX ADD DX, 2 LOOP A1 A2: ADD BX, DX MOV AX, BX A3: NOP AH 00 AX AL 11 37H 91H 0FFH 00 BH 11 00 00 00 00 שאלה פרק שלישי מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י: רונית )מרציאנו( גל-אור BX BL 11 11 16 03 04 CH 00 00 00 00 00 CX CL 04 03 02 11 00 CF + OF + SF + + 5 א. ב. השלמת קווים לחישוב מספר טבעי בריבוע ZF + + MOV CX,4 XOR AX,AX LEA BX,T AGAIN: ADD AL,[BX] INC BX LOOP AGAIN AGAIN: ADD AL,[BX] INC BX LOOP AGAIN AGAIN: ADD AL,[BX] INC BX LOOP AGAIN AGAIN: ADD AL,[BX] INC BX LOOP AGAIN
15 MOV CX,4 \ XOR AX,AX LEA BX,T AGAIN: MOV DL,[BX] XOR DH,DH ADD AX,DX INC BX LOOP AGAIN עדכון התוכנית כך שתחשב סכום ערכי המערך:
12 שאלה 6 ARR DB 5 DUP(?) א. נתונה ההגדרה הבאה: עקוב בעזרת טבלת מעקב אחר ביצוע של כל אחד מהקטעים וקבע אם הוא מבצע את הנדרש או לא. i. לא מבצע את הנדרש, מאפס רק 4 תאים ראשונים MOV SI,0 MOV CX,4 A1: MOV ARR[SI],0 ARR 00 00H 11 01H 11 02H 11 03H? 04H INC SI LOOP A1 CX 00H 04H SI 0000H 0001H 0002H 0003H 0004H.ii מבצע את הנדרש, MOV CX,5 LEA BX,ARR MOV AL,0 A1: MOV [BX],AL INC BX LOOP A1 CX BX AX AH AL 00H 05H 0000H 00 00H 04H 0001H 00H 03H 0002H 00H 02H 0003H 00H 01H 0004H 00H 00H 0005H
ב. 17 לא מבצע את הנדרש, מאפס רק 4 תאים אחרונים, לא מאפס את התא הראשון? 00 00 00 00 ARR 00H 01H 02H 03H 04H iii MOV BX,5 DEC BX A1: MOV ARR[BX],0 DEC BX JNZ A1 BX 00H 05H 00H 04H 00H 03H 00H 02H 00H 01H 00H 00H iv מבצע את הנדרש, MOV DI,0 A1: MOV ARR[DI],0 INC DI DI 0000H CMP DI,5 JC A1 0001H 0002H 0003H 0004H 0005H. טבלת מעקב אחר ביצוע קטע התוכנית 6 AX BX ZF SF CF AH AL BH BL C8H 3BH MOV AX, C83BH A8H 9CH + + MOV BX, A89CH 90H 76H SHL AX, 1 77H OR AL, 33H 63H NOT BL 38H DAH A8H 63H + ADD AX, BX
18 שאלה 7 במערך NUMBERS בגודל 111 בתים מופיעים הערכים 1 עד,0FFH והמערך APP בגודל 652 בתים החל מכתובת 2500Hמכיל אפסים. כתוב קטע באמסבלי שיעבור פעם אחת על אברי המערך NUMBERS וירשום במקום ה i במערך APP את מספר הפעמים שהמספר i הופיע במערך. NUMBERS MOV CX,100 XOR SI,SI XOR BH,BH MORE: MOV BL,[SI] INC APP[BX] INC SI LOOP MORE שאלה 8 יש לכתוב קטע תוכנית באסמבלי, שיציב באוגר שבאוגר.AX BL את מספר הפעמים שהרצף 1111 מופיע במספר הבינארי MOV CX,12 ; LOOP MOV BL,0 ; COUNTER 1011 AGAIN: MOV DX,AX AND DX,000BH CMP DX,000BH JNZ CONT INC BL CONT: SHR AX,1 LOOP AGAIN
19 מבוא לחקר ביצועים שאלה 9 שאלה 11 שאלה 11 שאלה 12
61 מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. שאלה 13 c / / push TS S c / / push A A a / A / pop A a / A / pop A a / S / pop S T c / / B push BS a / B T / a / B T / b / B / pop B b / T / pop T b / B / pop B b / T / pop T
61 שאלה 14 א. ב. המילה הקצרה ביותר היא 000$$. האוטומט שמקבל את השפה L: 1 1 1 $ $ $ 1 1 1 1 שאלה 15 n k L 0 1 2 n k 0 א. הוכחה שהשפה אינה רגולרית. נוכיח שהשפה L היא אי רגולרית, בדרך השלילה. נניח שהשפה רגולרית וקיים אוטומט סופי דטרמיניסטי A הבונה אותה. תהי הקבוצה האינסופית הבאה: התחלות של מילים בשפה L i j.w מתוך הקבוצה w1 0, w2 0 i j, נבחר שתי התחלות שונות, j 0 מאחר והאוטומט הוא סופי ניתן להניח כי שתי המילים מגיעות למצב משותף q t באוטומט. A משם נשרשר כל מילה עם הרצף. 1 i 2 שתי המילים מגיעות למצב משתף המילה יוצא גם ש- 0 i 1 עבור i>j שייכת לשפה, ולכן j 2. q r q r מצב מקבל. 0 i 1 גם בשפה, וזה בניגוד לכללי השפה. i 2,... מאחר ויש להם מסלול משותף, לכן הנחתנו ששתי המילים מגיעות למצב משתף אינה נכונה, אלא כל מילה מגיעה למצב אחר. ומאחר והקבוצה W היא אינסופית יוצא שכל מילה מגיע למצב אחר. ומכאן יש אינסוף מצבים ב-, A בניגוד להגדרת אוטומט סופי. לכן ההנחה שקיים אוטומט סופי הבונה את השפה L אינה נכונה, והשפה אינה רגולרית. W 0, 0 2 3 n, 0,..., 0 ואילו השפה L 1,(n>0) השפה. L 1 L החיתוך הוא השפה הריקה. השפה L חייבת להתחיל באות 0 את הספרה 1. ב. אינה מכילה כלל
66 השלמת מכונת טיורינג עבור הפונקציה min(m,n) f(m,n)= כאשר m,n>0, כתובים בשפה האונרית וסימן # מפריד בניהם. תוצאת המכונה תיכתב בין שני $. ימין, /a 1 ימין, /a a ימין, b /b ימין, 1 / 1 א שמאל, /b 1 ימין, /# # q0 q1 q2 q3 שאלה 16 א. שמאל, /b b שמאל, # / # שמאל, 1 1 / ב ימין /$, # ג שמאל, $ / Δ ימין 1, / b q4 q5 q6 ימין /$, Δ 1/$ ימין, /$ # שמאל 1, / b ב. תהליך החישוב של המכונה בעבור הקלט 1=m,1=n 1 # 1 Δ q0 a # 1 Δ q1 a # 1 Δ q2 a # b Δ q3 a # b Δ q3 a # b Δ q0 a $ b Δ q4 a $ 1 Δ Δ q4 a $ 1 $ Δ q5
63 שאלה תכנות מונחה עצמים Java 17 public class Program public static void main(string[] args) TransportationCompany company1 = new TransportationCompany(); א. Vehicle boat = new Boat ("sea ", 50); company1.addvehicle (boat); company1.addvehicle (new Train (150, 6)); אפשר כך )הוספת סירה( ואפשר גם כך )הוספת רכבת( company1.display(); public String tostring() return this.type + "\t" + this.way + "\t max speed : " + this.maxspeed; tostring() מתאימה: public String tostring() return "Train: \t\t" + super.tostring() + "\t num of carriages: " + this.numofcarriages; ב. נוסיף בכל מחלקה פעולה במחלקה :Vehicle במחלקה :Train public String tostring() return "Airplane: \t" + super.tostring() + "\t max height: " + this.maxheight; במחלקה :Airplane במחלקה :Boat )למעשה אפשר לוותר על הפעולה במחלקה זו כי אין לה תכונות נוספות מעבר לאלו שב-.Vehicle הפעולה הוספה למחלקה כדי שגם כלי השיט יציג את שם המחלקה שלו) public String tostring() return "Boat: \t\t" + super.tostring();
64 ג. הוספת קרונות רכבת הינה באחריותה של הרכבת. הוספת קרונות לכל הרכבות שבצי כלי הרכב של החברה הינו באחריותה של החברה. רק במחלקה זו יש גישה ישירה למערך כלי הרכב, ולכן נוסיף את הפעולה במחלקה : TransportationCompany --- הוספת n שבחברה הרכבות לכל קרונות ---// public void addcarriages (int n) for (int i = 0 ; i < this.counter ; i++) if (this.vehicles[i] instanceof Train) ((Train)this.vehicles[i]).incNumOfCariagges(n);
65 שאלה 18 הבדיקה אינה חובה. אם ערך התא null הפעולה instanceof תחזיר שקר
62 תרגיל 19: aseq n i i < 4 א. פלט 11 5 elements: 2, 5, 8, 11, 14 The sequence כן 0 ASeq כן 1 first 2 diff 3 2 3 4 כן כן לא public class Sequence protected int first; public Sequence(int first) this.first = first; ב. public int thenelement(int n) return this.first; public void displaynelements(int n) System.out.print("The sequence elements"); for (int i = 1 ; i < n ; i++) System.out.print(this.first + ","); System.out.println(this.first); האיבר האחרון מודפס ללא סימן פסיק אחריו השינויים במחלקה :ASeq public class ASeq extends Sequence // המחלקה מרחיבה את Sequence private int difference; // מוגדר במחלקת העל first public ASeq(int first, int difference) אתחול first ב- super(first); // super this.difference = difference; : // כל שאר המחלקה ללא שינוי : // כל פעולה מגדירה מחדש את הפעולות של מחלקת העל כך שיתאים לסדרה הנוכחית
67 ג. יש לממש את הפעולה סכום-הסדרה במחלקה.Sequance המחלקות היורשות יכולות להשתמש בפעולה ללא צורך בשינויים, כל אחת תממש את הפעולה לפי הפעולה thenelement המוגדרת בה. public int sumseq(int n) int sum = 0; for (int i = 1 ; i <= n ; i++) sum += thenelement(i); return sum; //------ comparing sumsequences ------- public static char check (int n, ASeq sqa, GSeq sqg) int suma = sqa.sumseq(n); int sumg = sqg.sumseq(n); ד. if (suma > sumg) return 'A'; if (suma < sumg) return 'G'; return 'E';
68 שאלה א. 21 כן. הינן חלק מהפעלות של,WhatIn1 WhatClass ולכן כל הפעולות של WhatClass יורשת מ- WhatIn1 ובכך היא עונה על התחייבותה לממש את הפעולה בממשק. כלומר - WhatIn1 מתפקדת כ- WhatOp ב. הפעולה לא תקינה. המחלקה יורשת מ- WhatClass ולכן עליה לזמן את הפעולה הבונה של מחלקת העל. התיקון : public WhatIn1(int number, int num) super(number); this.num = num; ג. הפעולה לא תקינה. הרשאת הגישה לתכונה number היא,private ולכן היא מוסתרת מהמחלקה. התיקון - זימון הפעולה :getnumber() public int calculate2() return (int)((this.getnumber() +this.num)/2); ד. )1( אי אפשר להסתמך על הפעולה בונה ברירת מחדל. מרגע שנוצרו פעולות בונות באחת ממחלקות-העל של,WhatIn2 התבטלה האופציה של פעולה בונה ברירת מחדל. )אם נסיר את הפעולות הבונות של המחלקות WhatClass ו- WhatIn1 יופעל בנאי המחדל(. System.out.println(obj.calculate3(1000, 100, 10)); )6( p1 p2 p3 calculate3(p1,p2,p3) 1000 100 10 21,000 + 3* 10*10*10 24,000 calculate3(p1,p2) 1000 + 2*100*100 21,000 64,111 הפלט: calculate3(p1) 1*1000 1000 כל הפעולות מוכרות במחלקה WhatIn2 שיורשת מכל המחלקות האחרות.
69 תכנות מונחה עצמים #C הפתרון לפרק זה נכתב ע"י... שאלה 21 שאלה 22 נכתב ע"י זיוה קונצמן public virtual bool IsLike(Object obj) return obj is AA && ((AA)obj).GetSt().Equals(this.GetSt()); public override bool IsLike(object obj) return obj is BB && ((BB)obj).GetNum() == this.getnum(); במחלקה :AA במחלקה : BB א. ב. ג. ד. ה. קטע התוכנית נכון. מתבצעת המרה אוטומטית כלפי מעלה של משתנה מטיפוס הבן להפניה מטיפוס האב. הבן הוא גם טיפוס האב לכן אין בעיה. st = excellent num = 1 הפלט יהיה: קטע התוכנית שגוי. לא יכול להמיר כלפי מטה הפניה מסוג האב להיות הפניה מסוג הבן, הוא לא נוצר כ- BB אלא כ-,AA ואינו יכול לעבור המרה למשהו שהוא לא. השגיאה היא שגיאת קומפילציה. public static string LongString(Object[] a) string st = ""; for (int i = 0; i < st.length; i++) if (a[i] is AA &&! (a[i] is BB)) st += ((AA)a[i]).GetSt(); else if (a[i] is BB) for (int j = 1 ; j < ((BB)a[i]).GetNum() ; j++) st += ((BB)a[i]).GetSt(); return st;
31 תרגיל 23: א. aseq: ASeq Aseq first=2 difference=3 public class Sequence protected int first; public Sequence(int first) this.first = first; public virtual int TheNElement(int n) return this.first; public virtual void DisplayNElement(int n) Console.Write("The sequence elements"); for (int i = 0; i < n; i++) Console.Write(this.first + ","); public class ASeq:Sequence private int difference; public ASeq(int first, int difference):base(first) this.difference = difference; public override int TheNElement(int n) return this.first + (n - 1) * this.difference; public override void DisplayNElement(int n) Console.Write("The sequence elements"); for (int i = 0 ; i < n - 1 ; i++) Console.Write(this.TheNElement(i + 1) + ","); Console.WriteLine(this.TheNElement(n));.1.6 ב.
31 public int SumSeq(int n) int sum = 0; for (int i = 1; i <= n; i++) sum += TheNElement(i); return sum; ג. אין צורך לעשות כל שינוי. הפעולה תכתב במחלקת Sequence כך: בשתי המחלקות היורשות אין צורך בכתיבה מחודשת, כל אחת תממש את חישוב האיבר לפי הפעולה הכתובה בה, מכיוון שכאן יופעל מנגנון הדריסה. public static char Bigger(int n, ASeq a, Gseq g) int s1 = a.sumseq(n); int s2 = g.sumseq(n); if (s1 > s2) return 'A'; if (s2 > s1) return 'G'; return 'E'; ד.
36 שאלה 24